package offer.offer01;

/**
 * 看一下StringBuilder
 */
public class S05替换空格 {
    /**
     *找到空格之后把两个空格之间的字符串加到要输出的字符串上, 再加一个%20
     */
    public String replaceSpace(String s){
        String output = "";
        int loca = 0;
        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == ' ') {
                output += s.substring(loca, i);
                output += "%20";
                loca = i+1;
            }
        }
        //subString的第二个参数是取不到的, subString(0, 1)只会取一个字符;
        output += s.substring(loca, s.length());
        return output;
    }

    /**
     *通过把字符串变成元素为字符的数组, 再创建一个符合目标长度的新数组,
     * 给新数组赋值的时候把空格变成%20, 这样会快一些, 比较底层, 不懂具体为什么会快。
     * 先数空格数，然后计算替换后需要的空间
     * 再倒序赋值
     */
    public String replaceSpace2(String s) {
        if(s == null || s.length() == 0) {
            return s;
        }
        int spaceCount = 0;
        for (char c : s.toCharArray()) {
            if (c == ' ') spaceCount++;
        }
        char[] newChars = new char[s.length() + spaceCount * 2];
        int cursor = s.length() - 1;
        for (int i = newChars.length - 1; i >= 0; i--) {
            char c = s.charAt(cursor);
            if (c == ' ') {
                newChars[i--] = '0';
                newChars[i--] = '2';
                newChars[i] = '%';
            } else {
                newChars[i] = c;
            }
            cursor--;
        }
        return new String(newChars);// String可以直接.toCharArray()也可以直接通过char[]来创建。
    }

}
